home *** CD-ROM | disk | FTP | other *** search
- <?xml version="1.0"?>
- <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
- <?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
- <modulesynopsis metafile="worker.xml.meta">
- <name>worker</name>
- <description>Multi-Processing Module implementing a hybrid
- multi-threaded multi-process web server</description>
- <status>MPM</status>
- <sourcefile>worker.c</sourcefile>
- <identifier>mpm_worker_module</identifier>
-
- <summary>
- <p>This Multi-Processing Module (MPM) implements a hybrid
- multi-process multi-threaded server. By using threads to serve
- requests, it is able to serve a large number of requests with
- less system resources than a process-based server. Yet it
- retains much of the stability of a process-based server by
- keeping multiple processes available, each with many threads.</p>
-
- <p>The most important directives used to control this MPM are
- <directive module="mpm_common">ThreadsPerChild</directive>, which
- controls the number of threads deployed by each child process and
- <directive module="mpm_common">MaxClients</directive>, which
- controls the maximum total number of threads that may be
- launched.</p>
- </summary>
- <seealso><a href="../bind.html">Setting which addresses and ports Apache
- uses</a></seealso>
-
- <section id="how-it-works"><title>How it Works</title>
- <p>Each process has a fixed
- number of threads. The server adjusts to handle load by
- increasing or decreasing the number of processes.</p>
-
- <p>A single control process is responsible for launching child
- processes. Each child process creates a fixed number of threads as
- specified in the <directive
- module="mpm_common">ThreadsPerChild</directive> directive. The
- individual threads then listen for connections and serve them when
- they arrive.</p>
-
- <p>Apache always tries to maintain a pool of <dfn>spare</dfn> or
- idle server threads, which stand ready to serve incoming
- requests. In this way, clients do not need to wait for a new
- threads or processes to be created before their requests can be
- served. The number of processes that will initially launched is
- set by the <directive module="mpm_common">StartServers</directive>
- directive. Then during operation, Apache assesses the total number
- of idle threads in all processes, and forks or kills processes to
- keep this number within the boundaries specified by <directive
- module="mpm_common">MinSpareThreads</directive> and <directive
- module="mpm_common">MaxSpareThreads</directive>. Since this
- process is very self-regulating, it is rarely necessary to modify
- these directives from their default values. The maximum number of
- clients that may be served simultaneously (i.e., the maximum total
- number of threads in all processes) is determined by the
- <directive module="mpm_common">MaxClients</directive> directive,
- while the maximum number of processes that can be launched is set
- by the <directive module="mpm_common">ServerLimit</directive>
- directive. <directive module="mpm_common">ServerLimit</directive>
- multiplied by <directive
- module="mpm_common">ThreadsPerChild</directive> must be greater
- than or equal to <directive
- module="mpm_common">MaxClients</directive></p>
-
- <p>A typical configuration of the process-thread controls in
- the <module>worker</module> MPM could look as follows:</p>
-
- <example>
- StartServers 2<br />
- MaxClients 150<br />
- MinSpareThreads 25<br />
- MaxSpareThreads 75<br />
- ThreadsPerChild 25<br />
- ServerLimit 16
- </example>
-
- <p>While the parent process is usually started as <code>root</code>
- under Unix in order to bind to port 80, the child processes and threads
- are launched by Apache as a less-privileged user. The <directive
- module="mpm_common">User</directive> and <directive
- module="mpm_common">Group</directive> directives are used to set
- the privileges of the Apache child processes. The child processes
- must be able to read all the content that will be served, but
- should have as few privileges beyond that as possible. In
- addition, unless <a href="../suexec.html">suexec</a> is used,
- these directives also set the privileges which will be inherited
- by CGI scripts.</p>
-
- <p><directive module="mpm_common">MaxRequestsPerChild</directive>
- controls how frequently the server recycles processes by killing
- old ones and launching new ones.</p>
- </section>
-
- <directivesynopsis location="mpm_common"><name>AcceptMutex</name>
- </directivesynopsis>
- <directivesynopsis location="mpm_common"><name>CoreDumpDirectory</name>
- </directivesynopsis>
- <directivesynopsis location="mpm_common"><name>Group</name>
- </directivesynopsis>
- <directivesynopsis location="mpm_common"><name>PidFile</name>
- </directivesynopsis>
- <directivesynopsis location="mpm_common"><name>Listen</name>
- </directivesynopsis>
- <directivesynopsis location="mpm_common"><name>ListenBacklog</name>
- </directivesynopsis>
- <directivesynopsis location="mpm_common"><name>LockFile</name>
- </directivesynopsis>
- <directivesynopsis location="mpm_common"><name>MaxClients</name>
- </directivesynopsis>
- <directivesynopsis location="mpm_common"><name>MaxMemFree</name>
- </directivesynopsis>
- <directivesynopsis location="mpm_common"><name>MaxRequestsPerChild</name>
- </directivesynopsis>
- <directivesynopsis location="mpm_common"><name>MaxSpareThreads</name>
- </directivesynopsis>
- <directivesynopsis location="mpm_common"><name>MinSpareThreads</name>
- </directivesynopsis>
- <directivesynopsis location="mpm_common"><name>ScoreBoardFile</name>
- </directivesynopsis>
- <directivesynopsis location="mpm_common"><name>SendBufferSize</name>
- </directivesynopsis>
- <directivesynopsis location="mpm_common"><name>ServerLimit</name>
- </directivesynopsis>
- <directivesynopsis location="mpm_common"><name>StartServers</name>
- </directivesynopsis>
- <directivesynopsis location="mpm_common"><name>ThreadLimit</name>
- </directivesynopsis>
- <directivesynopsis location="mpm_common"><name>ThreadsPerChild</name>
- </directivesynopsis>
- <directivesynopsis location="mpm_common"><name>User</name>
- </directivesynopsis>
-
- </modulesynopsis>
-